/** @jsxImportSource @emotion/react */
import * as React from "react";
import {Button, Text, TextArea, useTheme, useToast,} from "customize-easy-ui-component";
import {InspectRecordLayout, InternalItemProps, useItemInputControl} from "../../common/base";
import {setupItemAreaRoute} from "./orcIspConfig";
import {useMedia} from "use-media";
import {assertNamesUnique} from "../../common/eHelper";
import {EditStorageContext} from "../../StorageContext";
import {EachMeasureItemConfig} from "../../common/measure";
import {render设备类别} from "../../common/render";
import {itemA参数} from "./DesignParameter";
import {itemA结论} from "./editor";
import {itemA零部} from "./MainParts";
import {itemA验前检} from "./PretestCheck";
import {itemA技术资} from "./Documentation";
import {itemA结构型} from "./StructuralType";
import {itemA查样机} from "./PrototypeInsp";
import {itemA样机试} from "./Testings";
import {itemA自重} from "./SelfWeight";
import {itemA起升速} from "./MaxLiftSpeed";
import {itemA架倾斜} from "./TiltSpeed";
import {itemA转弯半} from "./Turning";
import {itemA行驶速} from "./Speed";
import {itemA挂钩牵, itemA牵引力, itemA电动叉, itemn爬坡} from "./Climbability";
import {itemA制动距, itemA杆拉力} from "./StopDistance";
import {itemA可靠性, itemA强化障, itemA试台班} from "./TestbedShift";
import {itemA性能复测} from "./PerforRetest";
import {itemA接地阻, itemA温度试} from "./ExplosionProof";
import {itemA样图} from "./PrototypeImg";


const 车架结构选=['三支点整体车架结构','四支点整体车架结构','铰接车架结构' ];
const 驾驶方式选=['坐驾','站驾','步驾' ];
const 抽样方式选= ["制造单位首次制造", "境外制造在境内首次投入使用", "产品任一主参数超出覆盖范围", "主要结构型式发生变化", "影响产品安全性能，市场监管总局提出型式试验要求 "];
export const config设备概况 = [
    [['设备类别(品种)', '_$设备类别',render设备类别], ['产品型号', '_$型号'], ],
    //防爆等级 ?=设备保护级别;  也不用台账的：
    [['额定起重量', '_$额起重','kg'], [{pr: '防爆', span: 3, t: '设备保护级别'}, '_$防爆级',] ],
    [['总图图号', '总图号'], [{t: '气体/粉尘组别'}, '爆粉尘组',],],
    [['车架编号', '_$底盘编号'], [{t: '温度组别'}, '爆温度组',],],
    [['动力方式', '_$动力方式'], ['传动方式', '_$传动方式'], ],
    [['车架结构', {n: '车架结', t: 'l', l: 车架结构选}], ['驾驶方式', {n: '驾驶式', t: 'l', l: 驾驶方式选}],],
    [['产品编号', '_$出厂编号'], ['设备代码', '_$设备代码'], ],
    [['生产许可证编号', '产许可号',], ['样机制造日期', '_$制造日期']],
    //台账的 制造单位地址
    [[{pr: '制造单位', span: 3, t: '住所'},  '_$制造单位地址', ], ],
    [[{t: '联系人'},  '制单联人',], ['联系电话', '制单联电'],],
    [[{t: '统一社会信用代码'}, '制单信码'], ['邮编', '制单邮编']],
    //【约定】服务- 申请单位 = 使用单位的.;
    [[{pr: '申请单位', span: 3, t: '住所'},  '_$使用单位地址', ], ],
    [[{t: '联系人'},  '_$单位联系人',], ['联系电话', '_$使用单位电话'],],
    [[{t: '统一社会信用代码'}, '_$使用单位信用码'], ['邮编', '_$使用单位邮编']],
    [['样机制造地址', '制造地'] ],
    //不用台账的 :设备使用地点；
    [['试验地点', '试验地点'] ],
    [['型式试验样机确认情况',{r:'符合要求'}], ],
    [['抽样方式', {n: '抽样式', t: 'l', l: 抽样方式选}], ],
    [['试验依据',{r:'《场(厂)内专用机动车辆安全技术规程》(TSG 81—2022)'}]],
    [['备注',{n:'概备注',t:'m'}]],
];

export const config观测1 =(orc:any)=> [
    [{n: '盖板间隙', t: ['C2.8(3)蓄电池盖板间距', '蓄电池金属盖或者非金属盖的金属部件与蓄电池带电部分之间应当有30mm以上的间隙。'],c:'四',d:'0', u: 'mm'}, ],
    [{check: '2.8(3)电池', }],
    [{n: '盖带电隙', t: [undefined,'若盖板和带电部分被有效绝缘，则其间隙至少有10mm。'],c:'四',d:'0', },],
    [{check: '2.8(3)盖板', }],
    [{n: '架开口尺', t: ['C2.16(10)挡货架开口尺寸', '挡货架上开口的两个尺寸中应有一个尺寸不大于150mm。'], c:'四',d:'0', u: 'mm'}, ],
    [{check: '2.16(10)'}],
    [{n: '小下滑', t: ['C3.1.3货叉自然下滑量、门架或者货叉倾角的自然变化量','货叉自然下滑量（10min）。','额定起重量≤10000kg：≤100mm/10min。'], c:'四',d:0, u: 'mm' },],
    [{check: '3.1.3下滑≤10'}],
    [{n: '大下滑', t: [undefined,undefined,'额定起重量＞10000kg： ≤200mm/10min。'], c:'四', d:0  },],
    [{check: '3.1.3下滑＞10'}],
    [{n: '倾角变', t: [undefined,'门架或者货叉倾角的自然变化量（10min）。', '门架或者货叉倾角的自然变化量≤5°/10 min。'], c:'四',d:2, u:'°' },],
    [{check: '3.1.3倾角'}],
    [{n: '向力左转', t: ['C3.2.2转向操作力测定', '舵柄操作的叉车原地转向操作力不大于400N。', '左转'], c:'四',d:0, u: 'N' },],
    [{check: '3.2.2舵左'}],
    [{n: '向力右转', t: [undefined,undefined,'右转'], c:'四', d:0  },],
    [{check: '3.2.2舵右'}],
    [{n: '方向盘左', t: [undefined,'方向盘操作的叉车原地转向操作力不大于20N。', '左转'], c:'四', d:0, u: 'N'},],
    [{check: '3.2.2方向左'}],
    [{n: '方向盘右', t: [undefined,undefined,'右转'], c:'四', d:0  },],
    [{check: '3.2.2方向右'}],
    [{n: '盘转力差', t: [undefined,'左右转向方向盘操作力相差不大于5N。'],  }, ],
    [{check: '3.2.2力相差'}],
    [{n: '停坡度', t: ['C3.5.1坡道驻车制动试验', '车辆停放坡度'], c:'四', d:0,u:'%' }, ],
    [{check: '3.5.1坡度'}],
    [{n: '柄制动进', t: [undefined, '通过操纵手柄实现制动，最大操纵力≤300N，如果规定的坡度超过15%，停车制动器手柄上施加的最大操纵力可超过300N，但不应超过500N。', '前进'],
                     u: 'N' ,  omit:'3.5.1手柄制' },
        {n: '柄制动退', t: [undefined, undefined, '后退'], c: '四', d:0,   omit:true},
    ],
    [{check: '3.5.1手柄制'}],
    [{n: '踩踏进', t: [undefined, '通过踩下踏板实现制动，最大操纵力≤450N。', '前进'],
                 omit:'3.5.1踩踏板' },
        {n: '踩踏退', t: [undefined, undefined, '后退'], c: '四', d:0, u: 'N',   omit:true},
    ],
    [{check: '3.5.1踩踏板'}],
    [{n: '松踏进', t: [undefined, '通过松开踏板实现制动，最大操纵力≤200N。', '前进'],
                 omit:'3.5.1松踏板' },
        {n: '松踏退', t: [undefined, undefined, '后退'], c: '四', d:0,   omit:true},
    ],
    [{check: '3.5.1松踏板'}],
] as EachMeasureItemConfig[][];

export const config观测2 =(orc:any)=> [
    [{n: '纵堆度', t: ['C3.6稳定性试验', '(1)纵向堆垛试验', '试验载荷，额定起重量＜5000kg平台倾斜度为4%时应不倾翻；额定起重量≥5000kg平台倾斜度为3.5 %时应不倾翻。'],
                    c:'四', u: '%'}, ],
    [{check: '3.6(1)堆垛试', }],
    [{n: '纵堆度野', t: [undefined,undefined, '越野型叉车：试验载荷，平台倾斜度为7 %时应不倾翻。'],c:'四', },],
    [{check: '3.6(1)堆垛越野', }],
    [{n: '纵运试斜', t: [undefined,'(2)纵向运行试验', '试验载荷，平台倾斜度为18%时应不倾翻。'],c:'四', },],
    [{check: '3.6(2)运行试', }],
    [{n: '纵运试野', t: [undefined,undefined, '越野型叉车：试验载荷，平台倾斜度为22 %时应不倾翻。'],c:'四', },],
    [{check: '3.6(2)运行越野', }],
    [{n: '横垛斜', t: ['C3.6稳定性试验', '(3)横向堆垛试验', '试验载荷，平台倾斜度为6%时应不倾翻。'], c:'四', u: '%'}, ],
    [{check: '3.6(3)横向堆垛', }],
    [{n: '横垛铰接', t: [undefined,undefined, '铰接式叉车：空载，额定起重量＜5000kg平台倾斜度为8%时应不倾翻；额定起重量≥5000kg平台倾斜度为6%时应不倾翻。'],c:'四', },],
    [{check: '3.6(3)铰接式', }],
    [{n: '横垛越野', t: [undefined,undefined, '越野型叉车：试验载荷，平台倾斜度为12 %时应不倾翻。'],c:'四', },],
    [{check: '3.6(3)越野型', }],
    [{n: '横垛无稳', t: [undefined,undefined, '越野型叉车（适用于无稳定器及/或车桥锁定装置）：空载，平台倾斜度为10 % 时应不倾翻。'],c:'四', u: '%'},],
    [{check: '3.6(3)无稳定器', }],
    [{n: '横向行', t: [undefined,'(4)横向运行试验', <>空载，平台倾斜度为（15+1.4v）%（额定起重量＜5000kg最大50%，额定起重量≥5000kg最大40%）时应不倾翻。<br/>
                    平台倾斜度要求值 {orc?.倾斜度要 || '—'}
                    </>], c:'四', },],
    [{check: '3.6(4)横向运行', }],
    [{n: '横向行野', t: [undefined,undefined, '越野型叉车：空载，平台倾斜度为50 % 时应不倾翻。'],c:'四', },],
    [{check: '3.6(4)横向越野型', }],
] as EachMeasureItemConfig[][];

export const config观测3 =(orc:any)=> [
    [{n:'池绝缘阻', t: ['C3.7(1)绝缘电阻', <>蓄电池绝缘电阻应当不小于50Ω乘蓄电池额定电压值, 即（{orc?.蓄额压50 || '—'}）MΩ；</>],
                   c:'四', u: 'MΩ'}, ],
    [{check: 'C3.7(1)蓄电池', }],
    [{n:'电绝缘阻', t: [undefined,<>其余电气设备的绝缘电阻应当不小于1kΩ乘蓄电池额定电压值，即（{orc?.蓄额压1k || '—'}）MΩ；</>],
                  c:'四', },],
    [{check: 'C3.7(1)其余电气', }],
    [{n: '顶开口宽', t: ['C3.8.1护顶架（司机室）试验', '护顶架（司机室）顶部开口的宽度或长度应有一个尺寸不超过150mm。'],
              c:'四',d:0, u: 'mm'}, ],
    [{check: '3.8.1护顶', }],
    [{n: '架垂变形', t: [undefined, '按GB/T 5143规定的方法进行动载试验，护顶架（司机室）的构件及其配件垂直方向的永久变形不应超过20mm。'],c:'四',d:0, },],
    [{check: '3.8.1永久变形', }],
    [{n: '坐驾距', t: [undefined,<div>按GB/T 5143规定的方法进行冲击下落试验，护顶架（司机室）及其配件应确保留有如下最小间距：a）对于坐驾式车辆，驾驶员位置处护顶架下侧水平切面与方向盘上表面水平切面之间为250mm；
                    b）对于站驾式车辆，驾驶员位置处护顶架下侧水平切面与车辆工作期间驾驶员站立表面之间为1600mm。
                </div>, '坐驾式车辆'],c:'四',d:0, u: 'mm' },],
    [{check: '3.8.1坐驾间距', }],
    [{n: '站驾距', t: [undefined, null, '站驾式车辆'],c:'四',d:0, },],
    [{check: '3.8.1站驾间距', }],
    [{n: '泵压溢', t: ['C3.8.2超载保护试验',
            '额定起重量≤5000kg：溢流状态下油泵出口压力应当小于标准载荷最大起升速度状态下油泵出口压力的1.3倍。额定起重量＞5000kg：溢流状态下油泵出口压力应当小于标准载荷最大起升速度状态下油泵出口压力的1.2倍。' ,
              '溢流状态下油泵出口压力'], c:'四', u: 'MPa'}, ],
    [{check: '3.8.2溢流', }],
    [{n:'泵压标', t: [undefined,undefined, '标准载荷最大起升速度状态下油泵出口压力'], c:'四', },],
    [{check: '3.8.2标准载荷', }],
    [{n:'泵压比', t: [undefined,undefined, '溢流状态下油泵出口压力与标准载荷最大起升速度状态下油泵出口压力比值'], c:'四',d:2, },],
    [{check: '3.8.2压力比值', }],
] as EachMeasureItemConfig[][];


//承压是可选组合的。  但，机电报告不是可选打印组合的，都必选的。
export const Projects记录 = [
    {name: '场（厂）内专用机动车辆型式试验结论报告',do: true},
    {name: '一、样机主要参数',do: true},
    {name: '二、样机主要结构型式及整机照片',do: true},
    {name: '三、样机技术资料审查',do: true},
    {name: '四、样机检查',do: true},
    {name: '五、样机试验',do: true},
    {name: '六、型式试验报告变更情况页',do: true}
];


export const EntranceSetup =
    React.forwardRef((
        {show, alone = true, verId, rep}: InternalItemProps, ref
    ) => {
        const theme = useTheme();
        const atPrint = useMedia('print');
        const toast = useToast();
        //特殊：没有上  #机电的impressionismAs?.Item；
        const doCheckNames = React.useCallback((verId: string) => {
            const impressionismAs = setupItemAreaRoute({rep, noDefault: true, theme});
            const result = assertNamesUnique([{value: rep?.tzFields},
                {value: config设备概况, type: 'esnt'},
                {value: [...itemA结论,...itemA参数,...itemA零部,...itemA验前检,...itemA技术资,...itemA结构型,...itemA查样机,...itemA样机试]},
                {value: config观测1(undefined), type: 'mesB'},{value: config观测2(undefined), type: 'mesB'},{value: config观测3(undefined), type: 'mesB'},
                {value: [...itemA自重, ...itemA起升速, ...itemA架倾斜, ...itemA转弯半, ...itemA行驶速, ...itemn爬坡, ...itemA牵引力, ...itemA挂钩牵 ]},
                {value: [...itemA电动叉, ...itemA杆拉力, ...itemA制动距, ...itemA试台班, ...itemA强化障, ...itemA可靠性 ]},
                {value: [...itemA性能复测, ...itemA温度试, ...itemA接地阻, ...itemA样图,  ]},
            {value:['仪器表','Projects','复检仪器', '倾斜度要','蓄额压50','蓄额压1k', '名变表']} ]);
        toast({title: "完成！", subtitle: result ? "没发现冲突" : "测试开关没开", intent: "success"});
    }, [rep,toast,theme]);
    const {storage, setStorage} =React.useContext(EditStorageContext) as any;
    const getInpFilter = React.useCallback((par: any) => {
        const {_tblFixed, } =par||{};
        return {_tblFixed, };
    }, []);
    const {inp, setInp} = useItemInputControl({ref});
    if (atPrint) return null;
    else return (
        <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show} alone={alone} label={'初始化本报告，默认值配置等'}>
            {process.env.REACT_APP_TEST==='true' && <><div>
                <Text variant="h5">构建开发模板时的工具：校验模板的存储name冲突；</Text>
                <Button intent='primary' onPress={() => doCheckNames(verId!)}>校验模板name唯一性</Button>
                <Text variant="h5">设置待测试表格的各列宽度：</Text>
                <TextArea value={storage?._tblFixed || ''} rows={2} onChange={e =>{
                    JSON.parse(e.currentTarget.value??'[]');
                    setStorage({ ...storage, _tblFixed: e.currentTarget.value || undefined}); }}/>
            </div>
            </>
            }
            <hr/>
        </InspectRecordLayout>
    );
});
